import os
import numpy as np

def gen_golden_data_simple():
    # 配置参数
    # 设置输入类型
    # import tensorflow as tf
    # dtype = tf.bfloat16.as_numpy_dtype
    # dtype = np.float16
    dtype = np.float16
    # dtype = np.int8
    # dtype = np.int16
    # dtype = np.int32
    # dtype = np.float16

    input_shape = [8, 2048]
    
    # 定义Hardshrink参数 λ
    lambda_val = 0.5
    
    # 生成包含正负数的输入数据（范围-3到4）
    x = np.random.uniform(-3, 4, input_shape).astype(dtype)
    
    # 计算Hardshrink结果：f(x) = x if |x| > λ else 0
    golden = np.where(np.abs(x) > lambda_val, x, 0).astype(dtype)
    
    # 创建输入输出目录（使用os.makedirs更规范）
    os.makedirs("./input", exist_ok=True)
    os.makedirs("./output", exist_ok=True)
    
    # 保存文件（保持原有文件格式）
    x.tofile("./input/input_x.bin")
    golden.tofile("./output/golden.bin")
    
    print(f"生成Hardshrink数据完成！")
    print(f"λ = {lambda_val}")
    print(f"输入数据形状: {x.shape}")
    print(f"输出数据形状: {golden.shape}")
    print(f"输入范围: [{x.min():.3f}, {x.max():.3f}]")
    print(f"输出范围: [{golden.min():.3f}, {golden.max():.3f}]")
    
    # 验证一些样本
    print("\n样本验证:")
    for i in range(5):
        x_sample = x[0, i]
        y_sample = golden[0, i]
        status = "保留" if abs(x_sample) > lambda_val else "置零"
        print(f"x={x_sample:7.3f}, |x|={abs(x_sample):5.3f}, f(x)={y_sample:7.3f} [{status}]")

if __name__ == "__main__":
    gen_golden_data_simple()